#ifndef MQPROTOCOLCONFIG_H
#define MQPROTOCOLCONFIG_H

#include <QJsonObject>
#include <QJsonArray>
#include <QStringList>
#include <QString>
#include <QMap>
#include <QCoreApplication>

/**
 * @brief 字段信息结构体，包含字段名和类型
 */
struct FieldInfo {
    QString name;   // 字段名
    QString type;   // 字段类型
};

/**
 * @brief MQ协议配置管理类
 * 负责加载和解析协议配置文件，提供字段验证相关的接口
 */
class MQProtocolConfig
{
public:
    /**
     * @brief 构造函数
     */
    MQProtocolConfig();
    
    /**
     * @brief 加载配置文件
     * @param configPath 配置文件路径，默认为"mq_protocol_config.json"
     * @return 加载成功返回true，失败返回false
     */
    bool loadConfig(const QString& configPath = "mq_protocol_config.json");
    
    /**
     * @brief 获取指定function_code的字段结构
     * @param functionCode 功能代码
     * @return 返回包含字段结构的QJsonObject
     */
    QJsonObject getProtocolFields(const QString& functionCode) const;
    
    /**
     * @brief 检查指定function_code是否存在配置
     * @param functionCode 功能代码
     * @return 存在返回true，不存在返回false
     */
    bool hasProtocol(const QString& functionCode) const;
    
    /**
     * @brief 获取指定字段的必需字段列表（只返回字段名）
     * @param functionCode 功能代码
     * @param fieldName 字段名
     * @return 返回字段名列表
     */
    QStringList getRequiredFields(const QString& functionCode, const QString& fieldName) const;
    
    /**
     * @brief 获取指定字段的字段信息（包含类型）
     * @param functionCode 功能代码
     * @param fieldName 字段名
     * @return 返回字段信息列表
     */
    QList<FieldInfo> getFieldInfos(const QString& functionCode, const QString& fieldName) const;
    
    /**
     * @brief 获取指定字段的类型
     * @param functionCode 功能代码
     * @param fieldName 字段名
     * @param subFieldName 子字段名
     * @return 返回字段类型字符串
     */
    QString getFieldType(const QString& functionCode, const QString& fieldName, const QString& subFieldName) const;
    
    /**
     * @brief 重新加载配置文件
     * @return 重新加载成功返回true，失败返回false
     */
    bool reloadConfig();
    
    /**
     * @brief 获取当前配置文件路径
     * @return 返回配置文件完整路径
     */
    QString getConfigPath() const;
    
private:
    QJsonObject m_protocolConfig;   // 协议配置数据
    QString m_configFilePath;       // 配置文件完整路径
};

#endif // MQPROTOCOLCONFIG_H